package arghhh.servlet;

import arghhh.implementaçao.Sistema;
import arghhh.implementaçao.modelo.Fa;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletArghhh extends HttpServlet {

    public static Sistema sistema = new Sistema();
    public Fa faLogado = new Fa(null, null, null, null, null, null, null, null, null, null, null);

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {} finally {
            out.close();
        }
    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String pagina = request.getParameter("pagina");

        if(pagina.equalsIgnoreCase("inicial")){
            RequestDispatcher d = request.getRequestDispatcher("index.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("Bandas")){
            RequestDispatcher d = request.getRequestDispatcher("Bandas.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("EditarPessoa")){
            request.setAttribute("fa", sistema.buscarFa(faLogado.getLogin()));
            RequestDispatcher d = request.getRequestDispatcher("Fa/EditarPessoa.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("Pessoas")){
            request.setAttribute("pessoas", sistema.getFas());
            RequestDispatcher d = request.getRequestDispatcher("Pessoas.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("Ranking")){
            RequestDispatcher d = request.getRequestDispatcher("Ranking.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("Links")){
            RequestDispatcher d = request.getRequestDispatcher("Links.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("Contato")){
            RequestDispatcher d = request.getRequestDispatcher("Contato.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("Cadastrar")){
            RequestDispatcher d = request.getRequestDispatcher("Cadastro.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("CadastroBanda")){
            RequestDispatcher d = request.getRequestDispatcher("CadastrarBanda.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("CadastroPessoa")){
            RequestDispatcher d = request.getRequestDispatcher("CadastrarPessoa.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("GerenciarAmigos")){
            RequestDispatcher d = request.getRequestDispatcher("Fa/GerenciarAmigos.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("GerenciarBandas")){
            RequestDispatcher d = request.getRequestDispatcher("Fa/GerenciarBandas.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("BandasSeguidas")){
            RequestDispatcher d = request.getRequestDispatcher("Fa/BandasSeguidas.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("Amigos")){
            RequestDispatcher d = request.getRequestDispatcher("Fa/Amigos.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("Fotos")){
            RequestDispatcher d = request.getRequestDispatcher("Fa/FotosFa.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("BandasSeguidas")){
            RequestDispatcher d = request.getRequestDispatcher("BandasSeguidas.jsp");
            d.forward(request, response);
            return;
        }

        if(pagina.equalsIgnoreCase("inicialLog")){
            RequestDispatcher d = request.getRequestDispatcher("indexLog.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("BandasLog")){
            RequestDispatcher d = request.getRequestDispatcher("Logado/BandasLog.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("PessoasLog")){
            request.setAttribute("pessoas", sistema.getFas());
            RequestDispatcher d = request.getRequestDispatcher("Logado/PessoasLog.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("RankingLog")){
            RequestDispatcher d = request.getRequestDispatcher("Logado/RankingLog.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("LinksLog")){
            RequestDispatcher d = request.getRequestDispatcher("Logado/LinksLog.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("ContatoLog")){
            RequestDispatcher d = request.getRequestDispatcher("Logado/ContatoLog.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("PerfilFa")){
            request.setAttribute("fa", faLogado);
            RequestDispatcher d = request.getRequestDispatcher("Fa/PerfilFa.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("AlbumFa")){
            request.setAttribute("fa", faLogado);
            RequestDispatcher d = request.getRequestDispatcher("Fa/AlbumFa.jsp");
            d.forward(request, response);
            return;
        }

        else if(pagina.equalsIgnoreCase("FotoFa")){
            request.setAttribute("fa", faLogado);
            RequestDispatcher d = request.getRequestDispatcher("Fa/FotoFa.jsp");
            d.forward(request, response);
            return;
        }
        
         else if(pagina.equalsIgnoreCase("visitarUsuario")){
            
            System.out.println("chegou vistar usuario");
            String usuario = request.getParameter("login");
            Fa faVisitado = sistema.buscarFa(usuario);
            request.setAttribute("fa", faVisitado);
            RequestDispatcher d = request.getRequestDispatcher("Visitante/PerfilFa.jsp");
            
            d.forward(request, response);
            return;
        }



        processRequest(request, response);
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String botao = request.getParameter("botao");

        // strings para pesquisa abaixo

            String busca = request.getParameter("busca");
            String tipo = request.getParameter("tipo");

            
        if(botao.equalsIgnoreCase("Realizar Cadastro")){
            String senha = request.getParameter("password");
            String senhaCheck = request.getParameter("passwordCheck");
            if(!senha.equals(senhaCheck)){
                RequestDispatcher d = request.getRequestDispatcher("index.jsp"); //Direcionar Para Erro
                d.forward(request, response);
                return;
            }
            String login = request.getParameter("username");
            if(sistema.containsLogin(login)){
                RequestDispatcher d = request.getRequestDispatcher("index.jsp"); //Direcionar Para Erro
                d.forward(request, response);
                return;
            }
            String nome = request.getParameter("nome");
            String email = request.getParameter("email");
            String[] genero = request.getParameterValues("genero");
            String mes = request.getParameter("mes");
            String dia = request.getParameter("dia");
            String ano = request.getParameter("ano");
            String cidade = request.getParameter("cidade");
            String estado = request.getParameter("estado");
            
            String[] estilos = request.getParameterValues("estilo");
            
            Fa faTemp = new Fa(login, senha, nome, email, dia, mes, ano, cidade, estado, genero[0], estilos);

            Map<String,String> AttErr = checarCadastro(faTemp);

            if(!AttErr.isEmpty()){
                 request.setAttribute("erros", checarCadastro(faTemp));
                 RequestDispatcher d = request.getRequestDispatcher("erro.jsp");
                 d.forward(request, response);
            }

            try {
                sistema.inserirFa(login, senha, nome, email, dia, mes, ano, cidade, estado, genero, estilos);
            } catch (SQLException ex) {
                Logger.getLogger(ServletArghhh.class.getName()).log(Level.SEVERE, null, ex);
            }
            request.setAttribute("fa", sistema.buscarFa(login));
            faLogado = sistema.buscarFa(login);
            request.setAttribute("fa", faLogado);
            RequestDispatcher d = request.getRequestDispatcher("FA/PerfilFa.jsp");
            d.forward(request, response);
            return;
        }

        else if(botao.equalsIgnoreCase("entrar")){
            String login = request.getParameter("login");
            if(!sistema.containsLogin(login)){
                RequestDispatcher d = request.getRequestDispatcher("Cadastro.jsp");
                d.forward(request, response);
                return;
            }
            String senha = request.getParameter("password");
            if(!sistema.buscarFa(login).validarSenha(senha)){
                RequestDispatcher d = request.getRequestDispatcher("index.jsp"); // Enviar pro Erro
                d.forward(request, response);
                return;
            }
            request.setAttribute("fa", sistema.buscarFa(login));
            RequestDispatcher d = request.getRequestDispatcher("Fa/PerfilFa.jsp");
            d.forward(request, response);
            return;
            

        } else if(botao.equalsIgnoreCase("buscar")){
            

            if (tipo.equals("usuario")){
            Fa fatemporario = sistema.buscarFa(busca);
            Map<String, Fa> maptemporario = new HashMap();
            maptemporario.put(fatemporario.getLogin(), fatemporario);
            request.setAttribute("pessoas", maptemporario);
            RequestDispatcher d = request.getRequestDispatcher("Pessoas.jsp");
            d.forward(request, response);
            return;
            }

             if (tipo.equals("integrante")){
            //criar metodo que recupere os integrantes de uma banda
            Map<String, Fa> maptemporario = new HashMap();
            
            request.setAttribute("pessoas", maptemporario);
            RequestDispatcher d = request.getRequestDispatcher("Pessoas.jsp");
            d.forward(request, response);
            return;
            }

             if (tipo.equals("tudo")){
            //depende do if de cima
            Map<String, Fa> maptemporario = new HashMap();

            request.setAttribute("pessoas", maptemporario);
            RequestDispatcher d = request.getRequestDispatcher("Pessoas.jsp");
            d.forward(request, response);
            return;
            }  else if(botao.equalsIgnoreCase("entrar")){
            String login = request.getParameter("login");
            if(!sistema.containsLogin(login)){
                RequestDispatcher d = request.getRequestDispatcher("Cadastro.jsp");
                d.forward(request, response);
                return;
            }
            String senha = request.getParameter("password");
            if(!sistema.buscarFa(login).validarSenha(senha)){
                RequestDispatcher d = request.getRequestDispatcher("index.jsp"); // Enviar pro Erro
                d.forward(request, response);
                return;
            }
            request.setAttribute("fa", sistema.buscarFa(login));
            RequestDispatcher d = request.getRequestDispatcher("PerfilFa.jsp");
            d.forward(request, response);
            return;


        } else if(botao.equalsIgnoreCase("buscarLog")){
            

            if (tipo.equals("usuario")){
            Fa fatemporario = sistema.buscarFa(busca);
            Map<String, Fa> maptemporario = new HashMap();
            maptemporario.put(fatemporario.getLogin(), fatemporario);
            request.setAttribute("pessoas", maptemporario);
            RequestDispatcher d = request.getRequestDispatcher("Pessoas.jsp");
            d.forward(request, response);
            return;
            }

             if (tipo.equals("integrante")){
            //criar metodo que recupere os integrantes de uma banda
            Map<String, Fa> maptemporario = new HashMap();

            request.setAttribute("pessoas", maptemporario);
            RequestDispatcher d = request.getRequestDispatcher("Pessoas.jsp");
            d.forward(request, response);
            return;
            }

             if (tipo.equals("tudo")){
            //depende do if de cima
            Map<String, Fa> maptemporario = new HashMap();

            request.setAttribute("pessoas", maptemporario);
            RequestDispatcher d = request.getRequestDispatcher("Pessoas.jsp");
            d.forward(request, response);
            return;
            }
        }

        processRequest(request, response);
    }

    }
      @Override
    public String getServletInfo(){
        return "Short description";
    }

    public Map<String, String> checarCadastro(Fa faTemp){
        Map<String, String> AttErr = new HashMap();

        if(faTemp.getLogin().isEmpty()){
            AttErr.put("Nome de usuario", "Nome de usuario");
        }
        if(faTemp.getNome().isEmpty()){
            AttErr.put("Nome", "Nome");
        }
        if(faTemp.getEmail().isEmpty()){
            AttErr.put("Email", "Email");
        }
        if(faTemp.getDia().equalsIgnoreCase("-1")){
            AttErr.put("Dia", "Dia");
        }
        if(faTemp.getMes().equalsIgnoreCase("-1")){
            AttErr.put("Mes", "Mes");
        }
        if(faTemp.getAno().equalsIgnoreCase("-1")){
                AttErr.put("ano", "ano");
        }
        if(faTemp.getCidade().isEmpty()){
            AttErr.put("Cidade", "Cidade");
        }
        if(faTemp.getEstado().equalsIgnoreCase("-1")){
            AttErr.put("Estado", "Estado");
        }

        return AttErr;
    }
}
